


'''
1. 通过stage 定位到问题具体位置
2. 定位到倾斜的原因，join ， groupby ， count distinct
3. 根据不同的问题指定不同的解决方案


倾斜程度不高的情况， 
1. 增加suffle partition 从而减少但分区的数据压力
2. 提高 executor 的内存 避免 oom



join
1. 过滤掉出 倾斜的 key 单独处理， 对倾斜的key 使用 广播小表与之关联， /*+ BROADCAST(小表)*/
                SELECT /*+ BROADCAST(d) */  n.*, d.dimension_value  FROM non_skewed_data n JOIN dimension_table d ON n.join_key = d.join_key;
     非倾斜 数据部分使用普通的join
     最后结果 union起来

2. 或者拆分出 倾斜的key 使用加盐的方式（给倾斜的key 增加随机前缀，使其形成多个不同的key）
     复制膨胀小表
     最后 执行加盐 join



     spark3以后 的 AQE 在运行时自动检测倾斜的分区，将它拆分为更小的子分区
            开启  aqe 和数据倾斜join 优化： adaptive.enable true



group 操作

1. 先对数据 key 加盐，然后对加盐的数据，group by 求和或者其他，
    在对数据进行一次 group by 。。。


count distinct
    1. 额外增加一个  key 进行大力度去重
    2. 对小数据量进行二次去重，  核心思想就是  想办法将 数据量减少

    

    使用 group by  代替  distinct 
    使用  partuet ， orc 数据合理分区， 分桶
    对小文件进行合并，定期和分区
    
'''